package com.sjj.cp.server.server;

import java.util.ArrayList;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.springframework.context.ApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;



















import com.google.gwt.rpc.client.impl.RemoteException;
import com.google.gwt.user.server.rpc.RemoteServiceServlet;
import com.sjj.bl.ServiceFormula;
import com.sjj.cp.client.server.FormulaService;
import com.sjj.cp.shared.FormulaListado;
import com.sjj.cp.shared.MyGWTException;
import com.sjj.modelo.Farmaceuta;
import com.sjj.modelo.Formula;
import com.sjj.modelo.Medicamento;
import com.sjj.modelo.Medicamentoxformula;
import com.sjj.modelo.MedicamentoxformulaId;
import com.sjj.modelo.Paciente;
import com.sjj.util.exception.SisvedimeBLException;
import com.sjj.util.exception.SisvedimeDaoException;

//Esta mos

public class FormulaServiceImpl extends RemoteServiceServlet implements FormulaService {

	
	@Override
	public List<FormulaListado> obtenerFormulas() throws MyGWTException{
		System.out.println("PASE POR OBTENER FORMULAS");
		ServletContext sc = getServletContext();
		ApplicationContext webApp = WebApplicationContextUtils.getWebApplicationContext(sc);
		
		List<Formula> lista = new ArrayList<Formula>();
		
		List<FormulaListado> listaResultado = new ArrayList<FormulaListado>();
		
		try{
			//segun el bean usando la clase en nuestro caso ServiceFormula
			//se cambiara clienteBL por nuestro bean definido
			ServiceFormula formulaBL = (ServiceFormula) webApp.getBean("serviceFormula");
			
			lista = formulaBL.obtener();
			
			for(Formula formula : lista){
				System.out.println("Formyla id desde service impl:"+formula.getId());
				FormulaListado cl = new FormulaListado();				
				
				cl.setId(formula.getId());
				cl.setMedico(formula.getMedico().getNombre());
				cl.setPaciente(formula.getPaciente().getAfiliado());
				cl.setFarmaceuta(formula.getFarmaceuta().getNombre());
				//cl.setMedicamento(formula.getMedicamentoxformulas());
				cl.setFechaExpedicion(formula.getFechaExpedicion());
				cl.setEstado(formula.getEstado());
				cl.setFechaVencimiento(formula.getFechaVencimiento());
				cl.setFechaEntrega(formula.getFechaEntrega());
				cl.setCiudad(formula.getCiudad());
				cl.setDiagnostico(formula.getDiagnostico());
				cl.setFinalidad(formula.getFinalidad());
				cl.setRecomendaciones(formula.getRecomendaciones());
				
				List<String> idMedicamentos = new ArrayList<String>();
				List<String> medicamentos = new ArrayList<String>();
				
				Set<Medicamentoxformula> medxform = formula.getMedicamentoxformulas();
				System.out.println("tomando medicamentos "+medxform);
				for(Medicamentoxformula rel : medxform){
					System.out.println("ID MEDICAMENTO: "+rel.getMedicamento().getId());
					idMedicamentos.add(rel.getMedicamento().getId());
					medicamentos.add(rel.getMedicamento().getNombre());
				}
				
				cl.setMedicamentos(medicamentos);
				cl.setIdMedicamentos(idMedicamentos);
				
				listaResultado.add(cl);
				
				
			}
			
			
			
		}catch (SisvedimeDaoException e) {
			throw new MyGWTException(e.getMessage());
		}
		
		return listaResultado;
	}

	@Override
	public void guardarCliente(String text, String text2, String text3,
			String text4, String text5, String text6, String text7,
			String text8, String text9, String text10, String text11,
			List<String> medicamentos) throws MyGWTException {
		ServletContext sc = getServletContext();
		ApplicationContext webApp = WebApplicationContextUtils.getWebApplicationContext(sc);
		
		List<Formula> lista = new ArrayList<Formula>();
		
		List<FormulaListado> listaResultado = new ArrayList<FormulaListado>();
		
		try{
			//segun el bean usando la clase en nuestro caso ServiceFormula
			//se cambiara clienteBL por nuestro bean definido
			ServiceFormula formulaBL = (ServiceFormula) webApp.getBean("serviceFormula");
			Formula formula = new Formula();
			
			Paciente paciente = new Paciente();
			paciente.setId(text);
			Farmaceuta farmaceuta = new Farmaceuta();
			farmaceuta.setId(text2);
			Set<Medicamentoxformula> medxform = new HashSet<Medicamentoxformula>();
			
			for(String codMed : medicamentos){
				Medicamento med = new Medicamento();
				Formula form = new Formula();				
				Medicamentoxformula medxf = new Medicamentoxformula();
				med.setId(codMed);
				medxf.setMedicamento(med);
				form.setId(text3);
				medxf.setFormula(form);			
				
				MedicamentoxformulaId medxfid = new MedicamentoxformulaId();
				medxfid.setIdFormula(text3);
				medxfid.setIdMedicamento(codMed);
				medxf.setId(medxfid);
				
				medxform.add(medxf);
			}
			
			
			formula.setPaciente(paciente);
			formula.setFarmaceuta(farmaceuta);
			formula.setId(text3);
			formula.setFechaExpedicion(new Date(text4));			
			formula.setEstado(text5);
			formula.setFechaEntrega(new Date(text6));
			formula.setCiudad(text7);
			formula.setDiagnostico(text8);
			formula.setFinalidad(text9);
			formula.setRecomendaciones(text10);
			formula.setFechaVencimiento(new Date(text11));
			formula.setMedicamentoxformulas(medxform);	
			
			formulaBL.guardar(formula);
		}catch (SisvedimeDaoException e) {
			throw new MyGWTException(e.getMessage());
		} catch (SisvedimeBLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
	


}
